package priv.menguer.decorator;

import priv.menguer.decorator.controller.RedShapeDecorator;
import priv.menguer.decorator.service.Shape;
import priv.menguer.decorator.service.impl.Circle;
import priv.menguer.decorator.service.impl.Rectangle;

/**
 * @Title DecoratorPatternDemo.java
 * @description 装饰器模式（DecoratorPattern）允许向一个现有的对象添加新的功能，同时又不改变其结构。
 *              这种类型的设计模式属于结构型模式，它是作为现有的类的一个包装。
 *              这种模式创建了一个装饰类，用来包装原有的类，并在保持类方法签名完整性的前提下，提供了额外的功能。
 * @time 2018年10月26日 上午10:09:35
 * @author menguer@126.com
 * @version 1.0
 */
public class DecoratorPatternDemo {
	public static void main(String[] args) {

		Shape circle = new Circle();

		Shape redCircle = new RedShapeDecorator(new Circle());

		Shape redRectangle = new RedShapeDecorator(new Rectangle());
		System.out.println("Circle with normal border");
		circle.draw();

		System.out.println("\nCircle of red border");
		redCircle.draw();

		System.out.println("\nRectangle of red border");
		redRectangle.draw();
	}
}
